package cn.lklink.pay.lkl;

import cn.lklink.pay.lkl.core.LakalaPayClient;
import cn.lklink.pay.lkl.core.LakalaPayUrl;
import cn.lklink.pay.lkl.request.v3.LabsRequest;
import cn.lklink.pay.lkl.request.v3.los.GenerateOrderRequest;
import cn.lklink.pay.lkl.request.v3.los.QueryOrderRequest;

import java.io.IOException;

/**
 * 拉卡拉V3.0下订单类接口API
 *
 * @author Mr丶xie
 * @version 1.0.0
 * @mail xielinke@lklink.cn
 */
public class V3LosApi {

    /**
     * 收银台下单
     *
     * @param generateOrderRequest 请求报文
     * @return
     * @throws IOException
     */
    public static String generateOrder(GenerateOrderRequest generateOrderRequest) throws IOException {
        return LakalaPayClient.execute(LakalaPayUrl.V3_LOS_GENERATE_ORDER, new LabsRequest(generateOrderRequest));
    }

    /**
     * 收银台下单-简单
     *
     * @param out_order_no 商户订单号
     * @param total_amount 订单金额，单位：分
     * @param order_info   订单标题，在使用收银台扫码支付时必输入，交易时送往账户端
     * @param notify_url   订单支付成功后商户接收订单通知的地址
     * @param callback_url 客户端下单完成支付后返回的商户网页跳转地址
     * @return
     * @throws IOException
     */
    public static String generateOrder_simple(String out_order_no, Long total_amount, String order_info, String notify_url, String callback_url) throws IOException {
        // 初始化收银台下单接口请求报文
        GenerateOrderRequest request = new GenerateOrderRequest(out_order_no, total_amount, order_info);
        // 订单支付成功后商户接收订单通知的地址
        request.setNotify_url(notify_url);
        // 客户端下单完成支付后返回的商户网页跳转地址。
        request.setCallback_url(callback_url);

        return generateOrder(request);
    }

    /**
     * 订单交易信息查询
     *
     * @param queryOrderRequest 请求报文
     * @return
     * @throws IOException
     */
    public static String queryOrder(QueryOrderRequest queryOrderRequest) throws IOException {
        return LakalaPayClient.execute(LakalaPayUrl.V3_LOS_QUERY_ORDER, new LabsRequest(queryOrderRequest));
    }

    /**
     * 订单交易信息查询-根据商户订单号
     *
     * @param out_order_no 商户订单号
     * @return
     * @throws IOException
     */
    public static String queryOrderByOutOrderNo(String out_order_no) throws IOException {
        // 初始化订单交易信息查询接口请求报文
        QueryOrderRequest request = new QueryOrderRequest();
        // 商户订单号
        request.setOut_order_no(out_order_no);

        return queryOrder(request);
    }

}
